<!DOCTYPE html>
<html lang="en-US" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>4.7 - 调试接口 | Lua 5.4 中文参考手册</title>
    <meta name="description" content="《Lua5.4参考手册》 译自lua官方《Lua 5.4 Reference Manual》">
    <meta name="generator" content="VitePress v1.0.2">
    <link rel="preload stylesheet" href="/lua5.4-manual-zh/assets/style.hAw9--ld.css" as="style">
    
    <script type="module" src="/lua5.4-manual-zh/assets/app.CD1PPgMe.js"></script>
    <link rel="preload" href="/lua5.4-manual-zh/assets/inter-roman-latin.Bu8hRsVA.woff2" as="font" type="font/woff2" crossorigin="">
    <link rel="modulepreload" href="/lua5.4-manual-zh/assets/chunks/framework.Cy9JvDAg.js">
    <link rel="modulepreload" href="/lua5.4-manual-zh/assets/chunks/theme.DHUiWwh0.js">
    <link rel="modulepreload" href="/lua5.4-manual-zh/assets/4.7.md.DpPnx_nC.lean.js">
    <link rel="icon" href="/lua5.4-manual-zh/lua.ico">
    <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
    <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar has-sidebar top" data-v-7ad780c2 data-v-844edcde><div class="wrapper" data-v-844edcde><div class="container" data-v-844edcde><div class="title" data-v-844edcde><div class="VPNavBarTitle has-sidebar" data-v-844edcde data-v-0ad69264><a class="title" href="/lua5.4-manual-zh/" data-v-0ad69264><!--[--><!--]--><!--[--><img class="VPImage logo" src="/lua5.4-manual-zh/lua.ico" alt data-v-ab19afbb><!--]--><span data-v-0ad69264>Lua 5.4 中文参考手册</span><!--[--><!--]--></a></div></div><div class="content" data-v-844edcde><div class="content-body" data-v-844edcde><!--[--><!--]--><div class="VPNavBarSearch search" data-v-844edcde><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><!----><!----><div class="VPNavBarAppearance appearance" data-v-844edcde data-v-283b26e9><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-283b26e9 data-v-7df97737 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-7df97737></span><span class="vpi-moon moon" data-v-7df97737></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-844edcde data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/atom-l/lua5.4-manual-zh" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-844edcde data-v-8e87c032 data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af5898d3><span class="vpi-more-horizontal icon" data-v-af5898d3></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-e42ed9b3><!----><!--[--><!--[--><!----><div class="group" data-v-8e87c032><div class="item appearance" data-v-8e87c032><p class="label" data-v-8e87c032>Appearance</p><div class="appearance-action" data-v-8e87c032><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-8e87c032 data-v-7df97737 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-7df97737></span><span class="vpi-moon moon" data-v-7df97737></span><!--]--></span></span></button></div></div></div><div class="group" data-v-8e87c032><div class="item social-links" data-v-8e87c032><div class="VPSocialLinks social-links-list" data-v-8e87c032 data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/atom-l/lua5.4-manual-zh" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-844edcde data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-844edcde><div class="divider-line" data-v-844edcde></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-0b5c97a1><button data-v-0b5c97a1>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-4871f9f5><div class="curtain" data-v-4871f9f5></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-4871f9f5><span class="visually-hidden" id="sidebar-aria-label" data-v-4871f9f5> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-4871f9f5><section class="VPSidebarItem level-0 has-active" data-v-4871f9f5 data-v-c24f735a><div class="item" role="button" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><h2 class="text" data-v-c24f735a>Lua 5.4 中文参考手册</h2><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>1 - 简介</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>2 - 基本概念</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.1 - 值和类型</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.2 - 环境和全局环境</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.3 - 错误处理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.4.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.4 - 元表和元函数</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.5.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>2.5 - 垃圾回收（GC）</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.5.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.5.1 - 步进模式</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.5.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.5.2 - 代际模式</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.5.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.5.3 - GC元函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.5.4.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.5.4 - 弱表</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/2.6.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>2.6 - 协程（Coroutines）</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>3 - 语言</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.1 - 词法约定</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.2 - 变量</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>3.3 - 语句</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.1 - 语句块（Blocks）</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.2 - 代码块（Chunks）</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.3 - 赋值</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.4.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.4 - 控制结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.5.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.5 - for语句</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.6.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.6 - 作为语句的函数调用</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.7.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.7 - 局部声明</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.3.8.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.3.8 - 待关闭变量</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>3.4 - 表达式</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.1 - 算术操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.2 - 位操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.3 - 转换及强制转换</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.4.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.4 - 关系操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.5.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.5 - 逻辑操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.6.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.6 - 连接</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.7.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.7 - 取长操作符</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.8.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.8 - 优先级</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.9.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.9 - 表的构造</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.10.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.10 - 函数调用</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.11.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.11 - 函数定义</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.4.12.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.4.12 - 表达式列表和多重返回</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/3.5.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>3.5 - 可见性规则</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 is-link has-active" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>4 - 应用编程接口</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.1.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>4.1 - 栈</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.1.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.1.1 - 栈的大小</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.1.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.1.2 - 有效与可接受的索引</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.1.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.1.3 - 字符串指针</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.2 - C闭包</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.3 - 注册表</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.4.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>4.4 - C代码中的错误处理</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.4.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.4.1 - 状态码</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.5.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.5 - 在C代码中处理让出</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.6.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.6 - 函数及类型列表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/4.7.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>4.7 - 调试接口</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/5.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>5 - 辅助库</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/5.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>5.1 - 函数和类型</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>6 - 标准库</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.1 - 基础库</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.2 - 处理协程</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.3 – 模块</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.4.html" data-v-c24f735a><!--[--><h4 class="text" data-v-c24f735a>6.4 - 字符串操作</h4><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.4.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.4.1 - 模式匹配</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.4.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.4.2 - 打包与解包中的格式化字符串</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.5.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.5 - UTF-8支持</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.6.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.6 - 表操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.7.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.7 - 数学函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.8.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.8 - I/O操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.9.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.9 - OS相关操作</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/6.10.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>6.10 - 调试库</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/7.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>7 - 单独使用的Lua</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" tabindex="0" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/8.html" data-v-c24f735a><!--[--><h3 class="text" data-v-c24f735a>8 - 版本兼容性相关</h3><!--]--></a><!----></div><div class="items" data-v-c24f735a><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/8.1.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>8.1 - 语言中的兼容性问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/8.2.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>8.2 - 库中的兼容性问题</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/8.3.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>8.3 - API中的兼容性问题</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-c24f735a data-v-c24f735a><div class="item" data-v-c24f735a><div class="indicator" data-v-c24f735a></div><a class="VPLink link link" href="/lua5.4-manual-zh/9.html" data-v-c24f735a><!--[--><p class="text" data-v-c24f735a>9 - Lua完整语法</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" role="navigation" data-v-cb998dce data-v-6b52fe58><div class="content" data-v-6b52fe58><div class="outline-marker" data-v-6b52fe58></div><div class="outline-title" role="heading" aria-level="2" data-v-6b52fe58>页面导航</div><nav aria-labelledby="doc-outline-aria-label" data-v-6b52fe58><span class="visually-hidden" id="doc-outline-aria-label" data-v-6b52fe58> Table of Contents for current page </span><ul class="VPDocOutlineItem root" data-v-6b52fe58 data-v-53c99d69><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _lua5_4-manual-zh_4_7" data-v-e6f2a212><div><h2 id="_4-7-调试接口" tabindex="-1">4.7 - 调试接口 <a class="header-anchor" href="#_4-7-调试接口" aria-label="Permalink to &quot;4.7 - 调试接口&quot;">​</a></h2><p>Lua没有内置的调试工具。取而代之的是提供特殊的接口函数和<em>钩子 hooks</em>。这些接口可用于构建不同的调试器、监控、以及其他需要使用解释器“内部信息”的工具。</p><h3 id="lua_Debug" tabindex="-1">lua_Debug <a class="header-anchor" href="#lua_Debug" aria-label="Permalink to &quot;lua_Debug {#lua_Debug}&quot;">​</a></h3><div class="language-C vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">C</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">typedef</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> struct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> lua_Debug {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> event;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">name;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">           /* (n) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">namewhat;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">       /* (n) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">what;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">           /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">source;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">         /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  size_t</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> srclen;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">              /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> currentline;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">            /* (l) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> linedefined;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">            /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> lastlinedefined;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">        /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  unsigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nups;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">         /* (u) 上值的数量 */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  unsigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> char</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nparams;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">      /* (u) 参数数量 */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  char</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> isvararg;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">              /* (u) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  char</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> istailcall;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">            /* (t) */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  unsigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> short</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ftransfer;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">   /* (r) 被转移的第一个值的索引 */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  unsigned</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> short</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ntransfer;</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">   /* (r) 被转移的值的数量 */</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  char</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> short_src</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[LUA_IDSIZE];</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /* (S) */</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">  /* 私有部分 */</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  other fields</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">} lua_Debug;</span></span></code></pre></div><p>此结构体用于记录各种有关于函数或运行记录的信息部分。<a href="#lua_getstack">lua_getstack</a>在最近的一次调用中只会填充此结构体的私有部分。如果需要填充<a href="#lua_Debug">lua_Debug</a>的其他字段以得到有用的信息，那么你必须使用一个合适的参数来调用<a href="#lua_getinfo">lua_getinfo</a>函数。（具体说来，如果要获取某个字段，你必须要将上边代码块中对应字段后注释中用括号包围的字母传入到<a href="#lua_getinfo">lua_getinfo</a>的 what 参数中。）</p><p><a href="#lua_Debug">lua_Debug</a>中的各字段的含义如下：</p><ul><li><strong>source：</strong> 所创建的函数的代码块源码。当 <strong>source</strong> 由字符 &#39;@&#39; 为首时，则意味着函数定义在 &#39;@&#39; 后跟的文件中。当 <strong>source</strong> 由字符 &#39;=&#39; 为首时，其后边的内容中对源码的描述是依赖于用户的。否则，该函数就是定义在 <strong>source</strong> 表示的字符串中的。</li><li><strong>srclen：</strong> 字符串 <strong>source</strong> 的长度。</li><li><strong>short_src：</strong> 一个“可打印”版本的 <strong>source</strong> ，用于错误信息中。</li><li><strong>linedefined：</strong> 函数定义起始对应的行号。</li><li><strong>lastlinedefined：</strong> 函数定义末尾对应的行号。</li><li><strong>what：</strong> 当这个字符串内容为&quot;Lua&quot;时表示该函数是个Lua函数，为&quot;C&quot;时则是一个C函数，为&quot;main&quot;时则表示代码块的主体部分。</li><li><strong>currentline：</strong> 表示给定函数的执行到哪一行了。当提供不了有效行数信息的时候，<strong>currentline</strong> 会被置为 -1。</li><li><strong>name：</strong> 给定函数的合理名称。因为函数在Lua中是一等公民值，所以其没有固定的名称：有些函数是多个全局变量共有的值，其他的可能只是表中的字段。<a href="#lua_getinfo">lua_getinfo</a>函数会检查函数的调用方式以找到一个合适的名字。如果没有找到，那么 <strong>name</strong> 会被置为NULL。</li><li><strong>namewhat：</strong> 用于解释字段 <strong>name</strong>。<strong>namewhat</strong> 可以是&quot;global&quot;、&quot;local&quot;、&quot;method&quot;、&quot;field&quot;、&quot;upvalue&quot;、或者&quot;&quot;（空字符串），取决于该函数的调用方式。（在似乎没有合适的选择时，Lua会使用空字符串。）</li><li><strong>istailcall：</strong> 如果该函数是由尾调用形式唤起的则为true。在这种情况下，这一层的调用者不在栈中。</li><li><strong>nups：</strong> 该函数的上值数量。</li><li><strong>nparams：</strong> 该函数的参数数量（C函数中始终是0）。</li><li><strong>isvararg：</strong> 该函数是否为可变参数函数（对于C函数来说始终为 true ）。</li><li><strong>ftransfer：</strong> 被“转移”的第一个值在栈中的索引，即调用中的参数或返回语句中的返回值。（其他的值在第一个值其后边的连续索引中。）通过这个索引，你就可以使用<a href="#lua_getlocal">lua_getlocal</a>和<a href="#lua_setlocal">lua_setlocal</a>来访问或更改这些值。该字段只在调用 hook 期间标记第一个参数、或是返回 hook 中标记第一个返回的值中有意义。（对于调用 hook，该值始终为 1。）</li><li><strong>ntransfer：</strong> 被“转移”（参见上一条）的值的数量。（对于Lua函数的调用，这个值总是等于 <strong>nparams</strong>。）</li></ul><h3 id="lua_gethook" tabindex="-1">lua_gethook <a class="header-anchor" href="#lua_gethook" aria-label="Permalink to &quot;lua_gethook {#lua_gethook}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>lua_Hook lua_gethook (lua_State *L);</pre><p>返回当前函数的 hook。</p><h3 id="lua_gethookcount" tabindex="-1">lua_gethookcount <a class="header-anchor" href="#lua_gethookcount" aria-label="Permalink to &quot;lua_gethookcount {#lua_gethookcount}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>int lua_gethookcount (lua_State *L);</pre><p>返回当前函数的 hook 数量。</p><h3 id="lua_gethookmask" tabindex="-1">lua_gethookmask <a class="header-anchor" href="#lua_gethookmask" aria-label="Permalink to &quot;lua_gethookmask {#lua_gethookmask}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>int lua_gethookmask (lua_State *L);</pre><p>返回当前 hook 的掩码。</p><h3 id="lua_getinfo" tabindex="-1">lua_getinfo <a class="header-anchor" href="#lua_getinfo" aria-label="Permalink to &quot;lua_getinfo {#lua_getinfo}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-(0|1), +(0|1|2), <em>m</em>]</span></p><pre>int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);</pre><p>获取某个函数或某个函数调用的信息。</p><p>如需获取某个函数调用的信息，那么参数 ar 必须为一个有效的活动记录，其可以是由在此之前调用<a href="#lua_getstack">lua_getstack</a>所填充的，或是作为 hook 的参数给出的（参见<a href="#lua_Hook">lua_Hook</a>）。</p><p>如需获取某个函数的相关信息，你需要将其压入栈中并将字符串 what 的开头设为 &#39;&gt;&#39; 字符。（这种情况下，<a href="#lua_getinfo">lua_getinfo</a>会从栈上弹出这个函数。）例如，想知道函数 f 的定义，你可以这样写：</p><div class="language-C vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">C</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    lua_Debug ar;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">    lua_getglobal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(L, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;f&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">  /* 获取全局函数 f */</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">    lua_getinfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(L, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;&gt;S&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&amp;</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ar</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">    printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%d\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, ar.linedefined);</span></span></code></pre></div><p>字符串 what 中的各个字符都会使得结构体 ar 中的某些特定的字段被设置，或是将某个值压入到栈中。（这些字符在结构体<a href="#lua_Debug">lua_Debug</a>中各字段后的注释中标明了，在其中是由括号包围起来的字符。）各字符选项的含义如下所示：</p><ul><li><strong>&#39;f&#39;：</strong> 将运行在给定层级中的函数压入栈中。</li><li><strong>&#39;l&#39;：</strong> 填充 currentline 字段。</li><li><strong>&#39;n&#39;：</strong> 填充 name、namewhat 字段。</li><li><strong>&#39;r&#39;：</strong> 填充 ftransfer、ntransfer 字段。</li><li><strong>&#39;S&#39;：</strong> 填充 source、short_src、linedefined、lastlinedefined、what 字段。</li><li><strong>&#39;t&#39;：</strong> 填充 istailcall 字段。</li><li><strong>&#39;u&#39;：</strong> 填充 nups、nparams、isvararg 字段。</li><li><strong>&#39;L&#39;：</strong> 将一个表压入栈中，该表的索引是在函数上关联的源代码行号，即那些可以打断点的行（不包括空行和注释）。如果该选项与选项 &#39;f&#39; 一起使用，那么再选项 &#39;f&#39; 压完栈之后再将这个表入栈。这是唯一可能抛出内存错误的选项。</li></ul><p>该函数返回0则表示 what 中有无效的字符选项，但此时其他的有效字符选项仍然会被处理。</p><h3 id="lua_getlocal" tabindex="-1">lua_getlocal <a class="header-anchor" href="#lua_getlocal" aria-label="Permalink to &quot;lua_getlocal {#lua_getlocal}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +(0|1), <em>-</em>]</span></p><pre>const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);</pre><p>获取给定的活动记录或函数中的局部变量或临时值的相关信息。</p><p>如果是从一个活动记录中获取信息，那么参数 ar 必须是之前使用<a href="#lua_getstack">lua_getstack</a>填充或是作为 hook 的参数给出（参见<a href="#lua_Hook">lua_Hook</a>）的有效活动记录。索引 n 决定了要查看哪个局部变量；关于局部变量索引和名称的细节，请参见<a href="/lua5.4-manual-zh/6.10.html#debug.getlocal">debug.getlocal</a>。</p><p><a href="#lua_getlocal">lua_getlocal</a> 会将变量的值压入栈中并返回其名称。</p><p>如果是从一个函数中获取信息，那么参数 ar 必须为NULL并且将要观察的函数放在栈顶上。这种情况下，只有Lua函数中的参数可见（因为没有关于活动变量的信息）并且不会将任何值压入栈中。</p><h3 id="lua_getstack" tabindex="-1">lua_getstack <a class="header-anchor" href="#lua_getstack" aria-label="Permalink to &quot;lua_getstack {#lua_getstack}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>int lua_getstack (lua_State *L, int level, lua_Debug *ar);</pre><p>获取解释器运行时栈的相关信息。</p><p>此函数会根据某个<em>活动记录 activation record</em> 的标识来填充结构体<a href="#lua_Debug">lua_Debug</a>的部分字段，这个活动记录来自于执行到给定层级 level 处的函数。当前运行的函数为第0层，而第 n+1 层的函数就是某个通过层层调用，调用了n层才到当前函数（尾调用不计数，其不算在调用栈层数中）。当传入的 level 参数大于当前调用栈的深度时，<a href="#lua_getstack">lua_getstack</a>会返回0；否则返回1。</p><h3 id="lua_getupvalue" tabindex="-1">lua_getupvalue <a class="header-anchor" href="#lua_getupvalue" aria-label="Permalink to &quot;lua_getupvalue {#lua_getupvalue}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +(0|1), <em>-</em>]</span></p><pre>const char *lua_getupvalue (lua_State *L, int funcindex, int n);</pre><p>获取给定索引处的闭包中的第 n 个上值。此函数会将对应上值的值压入栈中并返回它的名称。当索引 n 超出了实际上的上值数量时会返回 NULL（并且不会压栈）。</p><p>更多关于上值的细节请参见<a href="#">debug.getupvalue</a>。</p><h3 id="lua_Hook" tabindex="-1">lua_Hook <a class="header-anchor" href="#lua_Hook" aria-label="Permalink to &quot;lua_Hook {#lua_Hook}&quot;">​</a></h3><pre>typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);</pre><p>调试函数 hook 的类型。</p><p>每当一个 hook 被调用，其参数 ar 的 event 字段都会被置为触发 hook 的特定事件。Lua使用这些常量来标识各种事件：LUA_HOOKCALL、LUA_HOOKRET、LUA_HOOKTAILCALL、LUA_HOOKLINE、LUA_HOOKCOUNT 。此外，在 line 事件中也会设置 currentline 字段。如要获取 ar 中的其他字段值，则必须调用<a href="#lua_getinfo">lua_getinfo</a>。</p><p>对于 call 事件， event 可以是 LUA_HOOKCALL 表示常规调用；或是 LUA_HOOKTAILCALL 表示尾调用，此时不会有相应的 return 事件。</p><p>当Lua运行了一个 hook 时，它将屏蔽掉其他 hook 的调用。因此，当一个 hook 调用回了Lua并执行了某个函数或代码块，此时也不会触发其他的 hook 调用。</p><p>hook 函数没有延续函数，即不能在调用 <a href="/lua5.4-manual-zh/4.6.html#lua_yieldk">lua_yieldk</a>、<a href="/lua5.4-manual-zh/4.6.html#lua_pcallk">lua_pcallk</a>、<a href="/lua5.4-manual-zh/4.6.html#lua_callk">lua_callk</a> 使用非空的参数 k 。</p><p>hook 函数可以在这些条件下让出：只有 count 事件和 line 事件中可以让出；为了可以让出，hook 函数必须调用<a href="/lua5.4-manual-zh/4.6.html#lua_yield">lua_yield</a>完成执行，且参数 nresults 应当等于零（即没有返回值）。</p><h3 id="lua_sethook" tabindex="-1">lua_sethook <a class="header-anchor" href="#lua_sethook" aria-label="Permalink to &quot;lua_sethook {#lua_sethook}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>void lua_sethook (lua_State *L, lua_Hook f, int mask, int count);</pre><p>设置调试用的 hook 函数。</p><p>参数 f 就是 hook 函数。mask 表示那些事件会触发 hook ：其格式为各事件常量的按位或的结果，常量有 LUA_MASKCALL、LUA_MASKRET、LUA_MASKLINE、LUA_MASKCOUNT 。参数 count 只会在 mask 包括 LUA_MASKCOUNT 时才有意义。对于每个事件的 hook 调用的解释如下：</p><ul><li><strong>call hook：</strong> 当解释器调用一个函数时触发。这个 hook 只在Lua进入一个新函数后调用。</li><li><strong>return hook：</strong> 当解释器从一个函数中返回时触发。这个 hook 只在Lua离开函数后调用。</li><li><strong>line hook：</strong> 当解释器开始执行到代码新的一行时触发，或在其跳转回代码中时也会触发（即使是跳转到相同地方的代码）。这个事件只会在执行函数中触发。</li><li><strong>count hook：</strong> 解释器每当执行了 count 条指令后触发。这个事件只会在执行函数中触发。</li></ul><p>可以将 mask 置零以禁用 hook 。</p><h3 id="lua_setlocal" tabindex="-1">lua_setlocal <a class="header-anchor" href="#lua_setlocal" aria-label="Permalink to &quot;lua_setlocal {#lua_setlocal}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-(0|1), +0, <em>-</em>]</span></p><pre>const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);</pre><p>设置给定的活动记录中的局部变量的值。此函数会将栈顶上的值赋给这个局部变量并返回变量名。同时也会将栈顶上的值弹出。</p><p>当给出的索引大于实际上正活跃的变量数量时会返回NULL（而且不会将任何值从栈上弹出）。</p><p>参数 ar 和 n 和在<a href="#lua_getlocal">lua_getlocal</a>中的相同。</p><h3 id="lua_setupvalue" tabindex="-1">lua_setupvalue <a class="header-anchor" href="#lua_setupvalue" aria-label="Permalink to &quot;lua_setupvalue {#lua_setupvalue}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-(0|1), +0, <em>-</em>]</span></p><pre>const char *lua_setupvalue (lua_State *L, int funcindex, int n);</pre><p>设置一个闭包的上值。此函数会将栈顶上的值赋给这个上值并返回其名称。同时也会将栈顶上的值弹出。</p><p>当给出的索引大于上值数量时会返回NULL（而且不会将任何值从栈上弹出）。</p><p>参数 funcindex 和 n 和在<a href="#lua_getupvalue">lua_getupvalue</a>中的相同。</p><h3 id="lua_upvalueid" tabindex="-1">lua_upvalueid <a class="header-anchor" href="#lua_upvalueid" aria-label="Permalink to &quot;lua_upvalueid {#lua_upvalueid}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>void *lua_upvalueid (lua_State *L, int funcindex, int n);</pre><p>返回给定索引 funcindex 处的闭包中的第 n 个上值的唯一标识。</p><p>此唯一标识可以用于区分不同的闭包之间是否共享了同一个上值。对于共享了上值的闭包（即访问了同样的外部局部变量），其返回共享上值的唯一标识也是相同的。</p><p>参数 funcindex 和 n 和在<a href="#lua_getupvalue">lua_getupvalue</a>中的相同，但是 n 不可以大于上值的数量。</p><h3 id="lua_upvaluejoin" tabindex="-1">lua_upvaluejoin <a class="header-anchor" href="#lua_upvaluejoin" aria-label="Permalink to &quot;lua_upvaluejoin {#lua_upvaluejoin}&quot;">​</a></h3><p><span style="color:gray;float:right;font-size:small;">[-0, +0, <em>-</em>]</span></p><pre>void lua_upvaluejoin (lua_State *L, int funcindex1, int n1,
                                    int funcindex2, int n2);</pre><p>使索引 funcindex1 处的闭包中第 n1 个上值引用索引 funcindex2 处的闭包中第 n2 个上值。即之前提到的闭包之间共享上值。</p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-b77f9094><!--[--><!--]--><!----><nav class="prev-next" data-v-b77f9094><div class="pager" data-v-b77f9094><a class="VPLink link pager-link prev" href="/lua5.4-manual-zh/4.6.html" data-v-b77f9094><!--[--><span class="desc" data-v-b77f9094>上一页</span><span class="title" data-v-b77f9094>4.6 - 函数及类型列表</span><!--]--></a></div><div class="pager" data-v-b77f9094><a class="VPLink link pager-link next" href="/lua5.4-manual-zh/5.html" data-v-b77f9094><!--[--><span class="desc" data-v-b77f9094>下一页</span><span class="title" data-v-b77f9094>5 - 辅助库</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
    <script>window.__VP_HASH_MAP__=JSON.parse("{\"3.3.7.md\":\"pfeqcyVM\",\"4.2.md\":\"DU_MNo2A\",\"3.3.3.md\":\"DAxfGF5a\",\"2.5.4.md\":\"3e3i-4F7\",\"3.3.6.md\":\"uaSnvTE5\",\"2.5.3.md\":\"BGMA7d61\",\"3.2.md\":\"CrTgrVXO\",\"3.3.8.md\":\"BWMuhB89\",\"1.md\":\"CvScYmVY\",\"3.1.md\":\"DhtQ8-rf\",\"4.4.1.md\":\"DriYgeGB\",\"2.md\":\"owpiWXoA\",\"4.md\":\"h31naPs0\",\"3.4.8.md\":\"C9jGQeI-\",\"3.3.md\":\"Bd4w3T1w\",\"4.1.1.md\":\"D_fKwwN4\",\"index.md\":\"DmYmjAan\",\"3.4.3.md\":\"B1VJ2UYK\",\"3.4.md\":\"D8IZjo20\",\"4.1.md\":\"CeiPgVgQ\",\"2.4.md\":\"DDTBkjfa\",\"4.3.md\":\"BCQEn8b6\",\"3.4.7.md\":\"CoHdEWcO\",\"8.md\":\"DENWtMso\",\"8.3.md\":\"DFRhtIcE\",\"4.1.3.md\":\"Gu7R695n\",\"3.4.5.md\":\"CLWmYx1v\",\"4.4.md\":\"C1BNn31p\",\"3.3.2.md\":\"CmqNdbtS\",\"3.4.2.md\":\"B3bLMsFl\",\"4.1.2.md\":\"D4nBge4g\",\"6.4.2.md\":\"3i55NjsD\",\"6.5.md\":\"eghppwxP\",\"3.4.1.md\":\"Bbke4Da9\",\"6.1.md\":\"HzzAvNwc\",\"3.4.10.md\":\"COV2vTV0\",\"4.5.md\":\"DvB2XU_K\",\"3.3.1.md\":\"C--fgcm7\",\"3.md\":\"C8uM_Sk6\",\"2.1.md\":\"Cm4VxO4P\",\"3.4.9.md\":\"DIGlUyhn\",\"6.4.1.md\":\"54Bv0qVc\",\"3.4.6.md\":\"CxHAg4O9\",\"2.5.2.md\":\"DpcLaGKK\",\"8.1.md\":\"BgXPQseo\",\"9.md\":\"4Sh8Vqcb\",\"6.3.md\":\"b9Y3nZIn\",\"5.md\":\"D8RljHGN\",\"6.6.md\":\"vM-FQZyc\",\"2.2.md\":\"_ae2qo5y\",\"8.2.md\":\"CY2bTq_E\",\"3.4.11.md\":\"D93DWHpI\",\"3.5.md\":\"XbDNNkd7\",\"6.10.md\":\"BPKRsmkc\",\"3.3.5.md\":\"BJNZ4Tj2\",\"3.4.4.md\":\"BZ9rXp1C\",\"2.3.md\":\"aV87ll3Z\",\"6.9.md\":\"BedR8Ge8\",\"2.5.1.md\":\"DHMFBHvj\",\"3.4.12.md\":\"Dadd8YBx\",\"6.2.md\":\"MLQ3cYfR\",\"2.5.md\":\"BkjG14KA\",\"4.7.md\":\"DpPnx_nC\",\"3.3.4.md\":\"BYRIVDAF\",\"2.6.md\":\"Dkw1cVXs\",\"7.md\":\"DxU7YK0B\",\"6.md\":\"BLJxPsmA\",\"6.7.md\":\"C7FuANYc\",\"6.4.md\":\"DAxf5lrS\",\"6.8.md\":\"DdxDwB90\",\"5.1.md\":\"-iyTwL_N\",\"4.6.md\":\"4w9HNdg-\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Lua 5.4 中文参考手册\",\"description\":\"《Lua5.4参考手册》 译自lua官方《Lua 5.4 Reference Manual》\",\"base\":\"/lua5.4-manual-zh/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"sidebar\":[{\"text\":\"Lua 5.4 中文参考手册\",\"items\":[{\"text\":\"1 - 简介\",\"link\":\"/1\"},{\"text\":\"2 - 基本概念\",\"link\":\"/2\",\"items\":[{\"text\":\"2.1 - 值和类型\",\"link\":\"/2.1\"},{\"text\":\"2.2 - 环境和全局环境\",\"link\":\"/2.2\"},{\"text\":\"2.3 - 错误处理\",\"link\":\"/2.3\"},{\"text\":\"2.4 - 元表和元函数\",\"link\":\"/2.4\"},{\"text\":\"2.5 - 垃圾回收（GC）\",\"link\":\"/2.5\",\"items\":[{\"text\":\"2.5.1 - 步进模式\",\"link\":\"/2.5.1\"},{\"text\":\"2.5.2 - 代际模式\",\"link\":\"/2.5.2\"},{\"text\":\"2.5.3 - GC元函数\",\"link\":\"/2.5.3\"},{\"text\":\"2.5.4 - 弱表\",\"link\":\"/2.5.4\"}]},{\"text\":\"2.6 - 协程（Coroutines）\",\"link\":\"/2.6\"}]},{\"text\":\"3 - 语言\",\"link\":\"/3\",\"items\":[{\"text\":\"3.1 - 词法约定\",\"link\":\"/3.1\"},{\"text\":\"3.2 - 变量\",\"link\":\"/3.2\"},{\"text\":\"3.3 - 语句\",\"link\":\"/3.3\",\"items\":[{\"text\":\"3.3.1 - 语句块（Blocks）\",\"link\":\"/3.3.1\"},{\"text\":\"3.3.2 - 代码块（Chunks）\",\"link\":\"/3.3.2\"},{\"text\":\"3.3.3 - 赋值\",\"link\":\"/3.3.3\"},{\"text\":\"3.3.4 - 控制结构\",\"link\":\"/3.3.4\"},{\"text\":\"3.3.5 - for语句\",\"link\":\"/3.3.5\"},{\"text\":\"3.3.6 - 作为语句的函数调用\",\"link\":\"/3.3.6\"},{\"text\":\"3.3.7 - 局部声明\",\"link\":\"/3.3.7\"},{\"text\":\"3.3.8 - 待关闭变量\",\"link\":\"/3.3.8\"}]},{\"text\":\"3.4 - 表达式\",\"link\":\"/3.4\",\"items\":[{\"text\":\"3.4.1 - 算术操作\",\"link\":\"/3.4.1\"},{\"text\":\"3.4.2 - 位操作\",\"link\":\"/3.4.2\"},{\"text\":\"3.4.3 - 转换及强制转换\",\"link\":\"/3.4.3\"},{\"text\":\"3.4.4 - 关系操作\",\"link\":\"/3.4.4\"},{\"text\":\"3.4.5 - 逻辑操作\",\"link\":\"/3.4.5\"},{\"text\":\"3.4.6 - 连接\",\"link\":\"/3.4.6\"},{\"text\":\"3.4.7 - 取长操作符\",\"link\":\"/3.4.7\"},{\"text\":\"3.4.8 - 优先级\",\"link\":\"/3.4.8\"},{\"text\":\"3.4.9 - 表的构造\",\"link\":\"/3.4.9\"},{\"text\":\"3.4.10 - 函数调用\",\"link\":\"/3.4.10\"},{\"text\":\"3.4.11 - 函数定义\",\"link\":\"/3.4.11\"},{\"text\":\"3.4.12 - 表达式列表和多重返回\",\"link\":\"/3.4.12\"}]},{\"text\":\"3.5 - 可见性规则\",\"link\":\"/3.5\"}]},{\"text\":\"4 - 应用编程接口\",\"link\":\"/4\",\"items\":[{\"text\":\"4.1 - 栈\",\"link\":\"/4.1\",\"items\":[{\"text\":\"4.1.1 - 栈的大小\",\"link\":\"/4.1.1\"},{\"text\":\"4.1.2 - 有效与可接受的索引\",\"link\":\"/4.1.2\"},{\"text\":\"4.1.3 - 字符串指针\",\"link\":\"/4.1.3\"}]},{\"text\":\"4.2 - C闭包\",\"link\":\"/4.2\"},{\"text\":\"4.3 - 注册表\",\"link\":\"/4.3\"},{\"text\":\"4.4 - C代码中的错误处理\",\"link\":\"/4.4\",\"items\":[{\"text\":\"4.4.1 - 状态码\",\"link\":\"/4.4.1\"}]},{\"text\":\"4.5 - 在C代码中处理让出\",\"link\":\"/4.5\"},{\"text\":\"4.6 - 函数及类型列表\",\"link\":\"/4.6\"},{\"text\":\"4.7 - 调试接口\",\"link\":\"/4.7\"}]},{\"text\":\"5 - 辅助库\",\"link\":\"/5\",\"items\":[{\"text\":\"5.1 - 函数和类型\",\"link\":\"/5.1\"}]},{\"text\":\"6 - 标准库\",\"link\":\"/6\",\"items\":[{\"text\":\"6.1 - 基础库\",\"link\":\"/6.1\"},{\"text\":\"6.2 - 处理协程\",\"link\":\"/6.2\"},{\"text\":\"6.3 – 模块\",\"link\":\"/6.3\"},{\"text\":\"6.4 - 字符串操作\",\"link\":\"/6.4\",\"items\":[{\"text\":\"6.4.1 - 模式匹配\",\"link\":\"/6.4.1\"},{\"text\":\"6.4.2 - 打包与解包中的格式化字符串\",\"link\":\"/6.4.2\"}]},{\"text\":\"6.5 - UTF-8支持\",\"link\":\"/6.5\"},{\"text\":\"6.6 - 表操作\",\"link\":\"/6.6\"},{\"text\":\"6.7 - 数学函数\",\"link\":\"/6.7\"},{\"text\":\"6.8 - I/O操作\",\"link\":\"/6.8\"},{\"text\":\"6.9 - OS相关操作\",\"link\":\"/6.9\"},{\"text\":\"6.10 - 调试库\",\"link\":\"/6.10\"}]},{\"text\":\"7 - 单独使用的Lua\",\"link\":\"/7\"},{\"text\":\"8 - 版本兼容性相关\",\"link\":\"/8\",\"items\":[{\"text\":\"8.1 - 语言中的兼容性问题\",\"link\":\"/8.1\"},{\"text\":\"8.2 - 库中的兼容性问题\",\"link\":\"/8.2\"},{\"text\":\"8.3 - API中的兼容性问题\",\"link\":\"/8.3\"}]},{\"text\":\"9 - Lua完整语法\",\"link\":\"/9\"}]}],\"outline\":{\"label\":\"页面导航\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/atom-l/lua5.4-manual-zh\"}],\"logo\":\"/lua.ico\",\"search\":{\"provider\":\"local\",\"options\":{\"detailedView\":true}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
    
  </body>
</html>